package convert

import (
	"fmt"

	"golang.org/x/text/encoding/simplifiedchinese"
)

// StrGbkEncode 将UTF-8编码的字符串转换为GBK编码。
//
// 参数:
//   - str: 要转换的UTF-8编码字符串
//
// 返回值:
//   - string: 转换后的GBK编码字符串，如果转换失败则返回空字符串
//
// 示例:
//
//	gbkStr := StrGbkEncode("你好，世界")
func StrGbkEncode(str string) string {
	res, err := simplifiedchinese.GBK.NewEncoder().String(str)
	if err != nil {
		fmt.Println("StrGbkEncode error:" + err.Error() + " input:" + str)
		res = ""
	}
	return res
}

// StrGbkDecode 将GBK编码的字符串转换为UTF-8编码。
//
// 参数:
//   - str: 要转换的GBK编码字符串
//
// 返回值:
//   - string: 转换后的UTF-8编码字符串，如果转换失败则返回空字符串
//
// 示例:
//
//	utf8Str := StrGbkDecode(gbkStr)
func StrGbkDecode(str string) string {
	res, err := simplifiedchinese.GBK.NewDecoder().String(str)
	if err != nil {
		fmt.Println("StrGbkDecode error:" + err.Error() + " input:" + str)
		res = ""
	}
	return res
}

// StrGb18030Encode 将UTF-8编码的字符串转换为GB18030编码。
//
// GB18030是中国国家标准的简体中文字符集，是GBK的超集，支持更多的汉字。
//
// 参数:
//   - str: 要转换的UTF-8编码字符串
//
// 返回值:
//   - string: 转换后的GB18030编码字符串，如果转换失败则返回空字符串
//
// 示例:
//
//	gb18030Str := StrGb18030Encode("你好，世界")
func StrGb18030Encode(str string) string {
	res, err := simplifiedchinese.GB18030.NewDecoder().String(str)
	if err != nil {
		fmt.Println("StrGb18030Encode error:" + err.Error() + " input:" + str)
		res = ""
	}
	return res
}

// StrGb18030Decode 将GB18030编码的字符串转换为UTF-8编码。
//
// 参数:
//   - str: 要转换的GB18030编码字符串
//
// 返回值:
//   - string: 转换后的UTF-8编码字符串，如果转换失败则返回空字符串
//
// 示例:
//
//	utf8Str := StrGb18030Decode(gb18030Str)
func StrGb18030Decode(str string) string {
	res, err := simplifiedchinese.GB18030.NewDecoder().String(str)
	if err != nil {
		fmt.Println("StrGb18030Decode error:" + err.Error() + " input:" + str)
		res = ""
	}
	return res
}

// BytesGbkEncode 将UTF-8编码的字节切片转换为GBK编码。
//
// 参数:
//   - byteArray: 要转换的UTF-8编码字节切片
//
// 返回值:
//   - []byte: 转换后的GBK编码字节切片，如果转换失败则返回空字节切片
//
// 示例:
//
//	gbkBytes := BytesGbkEncode([]byte("你好，世界"))
func BytesGbkEncode(byteArray []byte) []byte {
	res, err := simplifiedchinese.GBK.NewEncoder().Bytes(byteArray)
	if err != nil {
		fmt.Println("BytesGbkEncode error:" + err.Error())
		res = []byte("")
	}
	return res
}

// BytesGbkDecode 将GBK编码的字节切片转换为UTF-8编码。
//
// 参数:
//   - byteArray: 要转换的GBK编码字节切片
//
// 返回值:
//   - []byte: 转换后的UTF-8编码字节切片，如果转换失败则返回空字节切片
//
// 示例:
//
//	utf8Bytes := BytesGbkDecode(gbkBytes)
func BytesGbkDecode(byteArray []byte) []byte {
	res, err := simplifiedchinese.GBK.NewDecoder().Bytes(byteArray)
	if err != nil {
		fmt.Println("BytesGbkDecode error:" + err.Error())
		res = []byte("")
	}
	return res
}

// BytesGb18030Encode 将UTF-8编码的字节切片转换为GB18030编码。
//
// GB18030是中国国家标准的简体中文字符集，是GBK的超集，支持更多的汉字。
//
// 参数:
//   - byteArray: 要转换的UTF-8编码字节切片
//
// 返回值:
//   - []byte: 转换后的GB18030编码字节切片，如果转换失败则返回空字节切片
//
// 示例:
//
//	gb18030Bytes := BytesGb18030Encode([]byte("你好，世界"))
func BytesGb18030Encode(byteArray []byte) []byte {
	res, err := simplifiedchinese.GB18030.NewEncoder().Bytes(byteArray)
	if err != nil {
		fmt.Println("BytesGb18030Encode error:" + err.Error())
		res = []byte("")
	}
	return res
}

// BytesGb18030Decode 将GB18030编码的字节切片转换为UTF-8编码。
//
// 参数:
//   - byteArray: 要转换的GB18030编码字节切片
//
// 返回值:
//   - []byte: 转换后的UTF-8编码字节切片，如果转换失败则返回空字节切片
//
// 示例:
//
//	utf8Bytes := BytesGb18030Decode(gb18030Bytes)
func BytesGb18030Decode(byteArray []byte) []byte {
	res, err := simplifiedchinese.GB18030.NewDecoder().Bytes(byteArray)
	if err != nil {
		fmt.Println("BytesGb18030Decode error:" + err.Error())
		res = []byte("")
	}
	return res
}
